﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;

using WindowsFormsApplication4;

namespace ProyectoFinal
{
    public partial class Form4 : Form
    {
        DataSet BaseDeDatos1;
        DataSet BaseDeDatos2;
        DataSet BaseDeProveedores;
        DataSet TablasBusquedas;
        bool cargo = false;

        string rutaIsotoposSQL = "Data Source=localhost;Initial Catalog=Isotopos;Integrated Security=True";

        public Form4()
        {
            cargar_categorias1();
            cargar_categorias2();
            cargar_proveedores();
            cargo = true;
            //Inicio de Evento
            cbCategorias1.SelectedIndex = 1;
            cbCategorias1.SelectedIndex = 0;
        }

        private void txtPrecioCompra_KeyPress(object sender, KeyPressEventArgs e)
        {
            if ((e.KeyChar < 48 || e.KeyChar > 59) && e.KeyChar != 8 && e.KeyChar != ',')
                e.Handled = true;
        }

        private void btnBorrarCampos_Click(object sender, EventArgs e)
        {
            txtCantidadxUnidad.Clear();
            txtNombre.Clear();
            txtPrecioCompra.Clear();
        }

        public void cargar_categorias1()
        {
            BaseDeDatos1 = new DataSet();
            string consultaSQL = "Select * from Categorías";
            InitializeComponent();
            SqlConnection cn = new SqlConnection(rutaIsotoposSQL);
            SqlDataAdapter adaptador = new SqlDataAdapter(consultaSQL, cn);
            cn.Open();
            adaptador.Fill(BaseDeDatos1, "Categorías");
            cn.Close();
            cbCategorias1.DataSource = BaseDeDatos1.Tables["Categorías"];
            cbCategorias1.ValueMember = "IdCategoría";
            cbCategorias1.DisplayMember = "NombreCategoría";
        }

        public void cargar_categorias2()
        {
            BaseDeDatos2 = new DataSet();
            string consultaSQL = "Select * from Categorías";
            SqlConnection cn = new SqlConnection(rutaIsotoposSQL);
            SqlDataAdapter adaptador = new SqlDataAdapter(consultaSQL, cn);
            cn.Open();
            adaptador.Fill(BaseDeDatos2, "Categorías");
            cn.Close();
            cbCategorias2.DataSource = BaseDeDatos2.Tables["Categorías"];
            cbCategorias2.ValueMember = "IdCategoría";
            cbCategorias2.DisplayMember = "NombreCategoría";
        }

        public void cargar_proveedores()
        {
            BaseDeProveedores = new DataSet();
            string QuerySQL = "Select * from Proveedores";
            SqlConnection cn = new SqlConnection(rutaIsotoposSQL);
            SqlDataAdapter adaptador = new SqlDataAdapter(QuerySQL, cn);
            cn.Open();
            adaptador.Fill(BaseDeProveedores, "Proveedores");
            cn.Close();
            cbProveedor.DataSource = BaseDeProveedores.Tables["Proveedores"];
            cbProveedor.ValueMember = "IdProveedor";
            cbProveedor.DisplayMember = "NombreCompañía";
        }

        private void btnSalir_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        public void elegir_categoria(string cat)
        {
            if (!cargo) return;
                //revisar
                TablasBusquedas = new DataSet();
                TablasBusquedas.Tables.Clear();
                string QuerySQL = "Select * from Productos where IdCategoría=" + cat;
                SqlConnection cn = new SqlConnection(rutaIsotoposSQL);
                SqlDataAdapter adaptador = new SqlDataAdapter(QuerySQL, cn);
                cn.Open();
                adaptador.Fill(TablasBusquedas, "Prods");
                cn.Close();
                lbProductos.DataSource = TablasBusquedas.Tables["Prods"];
                lbProductos.ValueMember = "IdProducto";
                lbProductos.DisplayMember = "NombreProducto";
        }

        private void cbCategorias1_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (cbCategorias1.SelectedIndex >= 0)
            {
                 elegir_categoria(cbCategorias1.SelectedValue.ToString());
            }
        }

        private void lbProductos_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                if ((lbProductos.SelectedIndex < 0))
                {
                    return;
                }

                txtNombre.Text = lbProductos.Text;
                string a = lbProductos.SelectedValue.ToString();             
                if (a.Length != 23)
                {
                    cargar_datos(a);
                }

            }
            catch (Exception)
            {
                return;
            }
        }

        public void limpiar_valores()
        {
            txtCantidadxUnidad.Clear();
            txtPrecioCompra.Clear();
        }

        public void cargar_datos(string cat)
        {
            limpiar_valores();
            //string ConsultaSQL = "Select * FROM Productos where NombreProducto = '" + txtNombre.Text + "'";
            //string ConsultaSQL = "Select * FROM Productos where NombreProducto = 'WAFFLE BRUSELAS AZUCAR FLOR'";
            string ConsultaSQL = "Select * FROM Productos where IdProducto = "+cat+"";
            //MessageBox.Show(cbApellidosNombre.SelectedValue.ToString());
            //MessageBox.Show(txtNombre.Text);

            SqlConnection Isotopos = new SqlConnection(rutaIsotoposSQL);
            Isotopos.Open();
            string StrComando = ConsultaSQL;
            SqlCommand COMAND = new SqlCommand(StrComando, Isotopos);
            DataTable tabla = new DataTable();
            SqlDataAdapter AdaptadorTabla = new SqlDataAdapter(StrComando, Isotopos);
            AdaptadorTabla.Fill(tabla);

            string IdProveedor = tabla.Rows[0]["IdProveedor"].ToString();
            string IdCategoria = tabla.Rows[0]["IdCategoría"].ToString();
            string CantidadxUnidad = tabla.Rows[0]["CantidadPorUnidad"].ToString();
            string PrecioCompra = tabla.Rows[0]["PrecioUnidadCompra"].ToString();

            string nombreProveedor = obtener_nombreId("Proveedores","IdProveedor",IdProveedor,"NombreCompañía");
            cbProveedor.Text = nombreProveedor;
            string nombreCategoria = obtener_nombreId("Categorías","IdCategoría", IdCategoria,"NombreCategoría");
            cbCategorias2.Text = nombreCategoria;

            txtCantidadxUnidad.Text = CantidadxUnidad;
            txtPrecioCompra.Text = PrecioCompra;
        }

        private string obtener_nombreId(string Tabla, string columna_Id, string id, string columna_nombreId)
        {
            string ConsultaSQL = "Select * from " + Tabla + " where " + columna_Id + " = " + id;

            SqlConnection Isotopos = new SqlConnection(rutaIsotoposSQL);
            Isotopos.Open();
            string StrComando = ConsultaSQL;
            SqlCommand COMAND = new SqlCommand(StrComando, Isotopos);
            DataTable tabla3 = new DataTable();
            SqlDataAdapter AdaptadorTabla = new SqlDataAdapter(StrComando, Isotopos);
            AdaptadorTabla.Fill(tabla3);

            string valor = tabla3.Rows[0][columna_nombreId].ToString();

            return valor;
        }

        private int maxIdProducto()
        {
            string QuerySQL = "Select (Max(IdProducto)+1) as Last from Productos";
            SqlConnection con = new SqlConnection(rutaIsotoposSQL);
            SqlCommand cmd = new SqlCommand(QuerySQL);
            DataTable tabla = new DataTable();
            SqlDataAdapter AdaptadorTabla = new SqlDataAdapter(QuerySQL, con);
            AdaptadorTabla.Fill(tabla);    
            int max = Convert.ToInt32(tabla.Rows[0]["Last"].ToString());

            return max;
        }

        Datos obDatos = new Datos();

        private void btnAñadirProducto_Click(object sender, EventArgs e)
        {
            MessageBox.Show(cbCategorias2.Text);
            int max = maxIdProducto();
            int IdProveedor = obtener_Id("Proveedores", "NombreCompañía", cbProveedor.Text, "IdProveedor");
            int IdCategoria = obtener_Id("Categorías", "NombreCategoría", cbCategorias2.Text, "IdCategoría");

            string sql =
            "insert into Productos (IdProducto,NombreProducto,IdProveedor,IdCategoría,CantidadPorUnidad,PrecioUnidad,UnidadesEnExistencia,UnidadesEnPedido,NivelNuevoPedido,Suspendido,PrecioUnidad2,PrecioUnidadCompra) values ('"
                   + max + "','" + this.txtNombre.Text + "','" + IdProveedor + "','" + IdCategoria + "','" + this.txtCantidadxUnidad.Text + "','" + 0 + "','" + 0 + "','" + 0 + "','" + 0 + "','"
                   + true + "','" + 0 + "','" + this.txtPrecioCompra.Text + "')";

            if (obDatos.Insertar(sql))
            {
                MessageBox.Show("Producto Añadido");
            }
            else
            {
                MessageBox.Show("Error al Añadir");
            }
        }

        private int obtener_Id(string Tabla, string columna_nombreId, string nombreId, string columna_Id)
        {
            string ConsultaSQL = "Select * from "+ Tabla +" where "+ columna_nombreId +" = '" + nombreId + "'";

            SqlConnection Isotopos = new SqlConnection(rutaIsotoposSQL);
            Isotopos.Open();
            string StrComando = ConsultaSQL;
            SqlCommand COMAND = new SqlCommand(StrComando, Isotopos);
            DataTable tabla3 = new DataTable();
            SqlDataAdapter AdaptadorTabla = new SqlDataAdapter(StrComando, Isotopos);
            AdaptadorTabla.Fill(tabla3);
            Isotopos.Close();

            int id = Convert.ToInt32(tabla3.Rows[0][columna_Id].ToString());

            return id;
        }

        private void btnActualizarProducto_Click(object sender, EventArgs e)
        {
            int IdProveedor = obtener_Id("Proveedores", "NombreCompañía", cbProveedor.Text, "IdProveedor");
            int IdCategoria = obtener_Id("Categorías", "NombreCategoría", cbCategorias2.Text, "IdCategoría");

            string campos = "IdProducto='" + lbProductos.SelectedValue.ToString() + "', NombreProducto='" + this.txtNombre.Text + "', IdProveedor='" + IdProveedor +
                            "', IdCategoría='" + IdCategoria + "', CantidadPorUnidad='" + this.txtCantidadxUnidad.Text + "', PrecioUnidadCompra='" + this.txtPrecioCompra.Text + "'";
            
            if (obDatos.Actualizar("Productos", campos, "IdProducto='" + lbProductos.SelectedValue.ToString() + "'"))
            {
                MessageBox.Show("Producto Actualizado");
            }
            else
            {
                MessageBox.Show("Error al Actualizar");
            }
        }

        private void btnEliminarProducto_Click(object sender, EventArgs e)
        {
            if (obDatos.Eliminar("Productos", "IdProducto='" + lbProductos.SelectedValue.ToString() + "'"))
            {
                MessageBox.Show("Producto Eliminado");
            }
            else
            {
                MessageBox.Show("Error al Eliminar");
            }
        }

        private void btnTablaProductos_Click(object sender, EventArgs e)
        {
            FormListado abrirformulario = new FormListado();
            abrirformulario.ShowDialog();
        }
    }
}
